package com.sun.jdk.lambda;

import com.sun.jdk.lambda.service.OrderService;
import com.sun.jdk.lambda.service.StudentService;

/**
 * Lambda表达式的省略写法
 */
public class Demo04Lambda {

    public static void main(String[] args) {

        // 原始写法
        goStudent(new StudentService() {
            @Override
            public String show(String name, Integer age) {
                return name + age + " 6666 ...";
            }
        });

        // lambda表达式标准写法。
        goStudent((String name, Integer age) -> {
            return name + age + " 6666 ...";
        });
        // lambda表达式的省略写法。 省略参数列表中的参数类型
        goStudent((name, age) -> {
            return name + age + " 6666 ...";
        });
        // lambda表达式省略写法。 如果大括号内仅有一条语句，可以同时省略大括号，return关键字，和语句分号
        goStudent((name, age) -> name + age + " 6666....");

        System.out.println("--------------------------");

        // 原始写法
        goOrder(new OrderService() {
            @Override
            public Integer show(String name) {
                return 666;
            }
        });

        // lambda表达式的标准写法
        goOrder((String name) -> {
            System.out.println("--->" + name);
            return 666;
        });

        // lambda表达式的省略写法。如果小括号内只有一个参数，可以省略小括号
        goOrder(name -> {
            return 666;
        });

        // lambda表达式的省略写法。如果大括号内仅有一条语句，可以同时省略大括号，return关键字，和语句分号
        System.out.println("%%%%");
        goOrder(name -> 666);
    }

    public static void goStudent(StudentService studentService) {
        studentService.show("张三", 22);
    }

    public static void goOrder(OrderService orderService) {
        orderService.show("李四");
    }
}
